package com.zzw.service.impl;

import com.zzw.entity.Product;
import com.zzw.entity.Result;
import com.zzw.mapper.ProductMapper;
import com.zzw.page.Page;
import com.zzw.service.ProductService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Project: warehouse
 * @Description:
 * @Author: zzw
 */
@Service
@Slf4j
public class ProductServiceImpl implements ProductService {

    @Autowired
    private ProductMapper productMapper;

    @Override
    public Page queryProductPage(Page page, Product product) {
        // 查询商品总行数
        int productCount = productMapper.selectProductCount(product);
        // 分页查询商品
        List<Product> productList = productMapper.selectProductPage(page, product);
        // 将查询到的总行数和当前页数据封装到Page对象
        page.setPageCount(productCount);
        page.setResultList(productList);

        return page;
    }

    /**
     * 将配置文件的file-access-path属性值注入给service的accessPath属性,
     * 其为上传的图片保存到数据库中的访问地址的目录路径/img/upload/;
     */
    @Value("${file.access-path}")
    private String accessPath;

    @Override
    public Result saveProduct(Product product) {
        // 处理上传图片的访问地址
        product.setImages(accessPath + product.getImages());
        // 添加商品
        int i = productMapper.insertProduct(product);
        if (i > 0) {
            return Result.ok("商品添加成功！");
        }
        return Result.err(Result.CODE_ERR_BUSINESS, "商品添加失败！");
    }

    @Override
    public Result updateProductState(Product product) {
        // 根据商品id修改商品上下架状态
        int i = productMapper.updateStateById(product.getProductId(), product.getUpDownState());
        if (i > 0) {
            return Result.ok("修改成功！");
        }
        return Result.err(Result.CODE_ERR_BUSINESS, "修改失败！");
    }

    @Override
    public Result deleteProduct(Integer productId) {
        // 根据商品id删除商品
        int i = productMapper.deleteProductById(productId);
        if (i > 0) {
            return Result.ok("商品删除成功！");
        }
        return Result.err(Result.CODE_ERR_BUSINESS, "商品删除失败！");
    }

    @Override
    public Result updateProduct(Product product) {
        /*
         * 处理商品上传的图片的访问地址:
         * 如果product对象的images属性值没有以/img/upload/开始,说明商品的图片被修改了
         * 即上传了新的图片,那么product对象的images属性值只是图片的名称,
         * 则给图片名称前拼接/img/upload构成商品新上传的图片的访问地址;
         */
        if (!product.getImages().startsWith(accessPath)) {
            product.setImages(accessPath + product.getImages());
        }
        //根据商品id修改商品信息
        int i = productMapper.updateProductById(product);
        if (i > 0) {
            return Result.ok("商品修改成功！");
        }
        return Result.err(Result.CODE_ERR_BUSINESS, "商品修改失败！");
    }

    @Override
    public Result deleteProductByIds(List<Integer> productIdList) {
        int i = productMapper.removeProductByIds(productIdList);
        if (i > 0) {
            return Result.ok("删除成功");
        }
        return Result.err(Result.CODE_ERR_BUSINESS, "删除失败");
    }
}
